ಮೂಲಭೂತ ಟೈಪಿಂಗ್ಗಳನ್ನು ಮೀರಿ ಮುಂದುವರಿಯಿರಿ. ಅತ್ಯಂತ ದೃಢವಾದ ಮತ್ತು ಟೈಪ್-ಸುರಕ್ಷಿತ APIಗಳನ್ನು ನಿರ್ಮಿಸಲು ಕಂಡೀಷನಲ್ ಟೈಪ್ಸ್, ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ಸ್ ಮತ್ತು ಸ್ಟ್ರಿಂಗ್ ಮ್ಯಾನಿಪುಲೇಶನ್ನಂತಹ ಸುಧಾರಿತ ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಕರಗತ ಮಾಡಿಕೊಳ್ಳಿ. ಜಾಗತಿಕ ಡೆವಲಪರ್ಗಳಿಗಾಗಿ ಒಂದು ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿ.
ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ನ ಸಂಪೂರ್ಣ ಸಾಮರ್ಥ್ಯವನ್ನು ಅನಾವರಣಗೊಳಿಸುವುದು: ಕಂಡೀಷನಲ್ ಟೈಪ್ಸ್, ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ಸ್ ಮತ್ತು ಸುಧಾರಿತ ಸ್ಟ್ರಿಂಗ್ ಮ್ಯಾನಿಪುಲೇಶನ್ ಕುರಿತು ಒಂದು ಆಳವಾದ ನೋಟ
ಆಧುನಿಕ ಸಾಫ್ಟ್ವೇರ್ ಅಭಿವೃದ್ಧಿಯ ಜಗತ್ತಿನಲ್ಲಿ, ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ಗಾಗಿ ಒಂದು ಸರಳ ಟೈಪ್-ಚೆಕರ್ ಎಂಬ ತನ್ನ ಆರಂಭಿಕ ಪಾತ್ರವನ್ನು ಮೀರಿ ವಿಕಸನಗೊಂಡಿದೆ. ಇದು ಟೈಪ್-ಲೆವೆಲ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಎಂದು ವಿವರಿಸಬಹುದಾದ ಒಂದು ಅತ್ಯಾಧುನಿಕ ಸಾಧನವಾಗಿ ಮಾರ್ಪಟ್ಟಿದೆ. ಈ ಮಾದರಿಯು ಡೆವಲಪರ್ಗಳಿಗೆ ಟೈಪ್ಗಳ ಮೇಲೆ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಕೋಡ್ ಬರೆಯಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ, ಇದರಿಂದಾಗಿ ಡೈನಾಮಿಕ್, ಸ್ವಯಂ-ದಾಖಲಿಸುವ ಮತ್ತು ಗಮನಾರ್ಹವಾಗಿ ಸುರಕ್ಷಿತವಾದ API ಗಳನ್ನು ರಚಿಸಬಹುದು. ಈ ಕ್ರಾಂತಿಯ ಹೃದಯಭಾಗದಲ್ಲಿ ಮೂರು ಶಕ್ತಿಶಾಲಿ ವೈಶಿಷ್ಟ್ಯಗಳು ಒಟ್ಟಿಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ: ಕಂಡೀಷನಲ್ ಟೈಪ್ಸ್, ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ ಟೈಪ್ಸ್, ಮತ್ತು ಆಂತರಿಕ ಸ್ಟ್ರಿಂಗ್ ಮ್ಯಾನಿಪುಲೇಶನ್ ಟೈಪ್ಗಳ ಒಂದು ಸ್ಯೂಟ್.
ತಮ್ಮ ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ ಕೌಶಲ್ಯಗಳನ್ನು ಉನ್ನತೀಕರಿಸಲು ಬಯಸುವ ಜಗತ್ತಿನಾದ್ಯಂತದ ಡೆವಲಪರ್ಗಳಿಗೆ, ಈ ಪರಿಕಲ್ಪನೆಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಇನ್ನು ಮುಂದೆ ಒಂದು ಐಷಾರಾಮವಲ್ಲ - ಇದು ಸ್ಕೇಲೆಬಲ್ ಮತ್ತು ನಿರ್ವಹಿಸಬಲ್ಲ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಒಂದು ಅವಶ್ಯಕತೆಯಾಗಿದೆ. ಈ ಮಾರ್ಗದರ್ಶಿಯು ನಿಮ್ಮನ್ನು ಮೂಲಭೂತ ತತ್ವಗಳಿಂದ ಪ್ರಾರಂಭಿಸಿ, ಅವುಗಳ ಸಂಯೋಜಿತ ಶಕ್ತಿಯನ್ನು ಪ್ರದರ್ಶಿಸುವ ಸಂಕೀರ್ಣ, ನೈಜ-ಪ್ರಪಂಚದ ಮಾದರಿಗಳವರೆಗೆ ಆಳವಾದ ಪ್ರಯಾಣಕ್ಕೆ ಕೊಂಡೊಯ್ಯುತ್ತದೆ. ನೀವು ಡಿಸೈನ್ ಸಿಸ್ಟಮ್, ಟೈಪ್-ಸುರಕ್ಷಿತ API ಕ್ಲೈಂಟ್, ಅಥವಾ ಸಂಕೀರ್ಣ ಡೇಟಾ-ಹ್ಯಾಂಡ್ಲಿಂಗ್ ಲೈಬ್ರರಿಯನ್ನು ನಿರ್ಮಿಸುತ್ತಿರಲಿ, ಈ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಕರಗತ ಮಾಡಿಕೊಳ್ಳುವುದು ನೀವು ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ ಬರೆಯುವ ವಿಧಾನವನ್ನು ಮೂಲಭೂತವಾಗಿ ಬದಲಾಯಿಸುತ್ತದೆ.
ಅಡಿಪಾಯ: ಕಂಡೀಷನಲ್ ಟೈಪ್ಸ್ (extends ಟರ್ನರಿ)
ಮೂಲಭೂತವಾಗಿ, ಕಂಡೀಷನಲ್ ಟೈಪ್ ಒಂದು ಟೈಪ್ ಸಂಬಂಧದ ಪರಿಶೀಲನೆಯ ಆಧಾರದ ಮೇಲೆ ಎರಡು ಸಂಭಾವ್ಯ ಟೈಪ್ಗಳಲ್ಲಿ ಒಂದನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ನೀವು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನ ಟರ್ನರಿ ಆಪರೇಟರ್ (condition ? valueIfTrue : valueIfFalse) ಗೆ ಪರಿಚಿತರಾಗಿದ್ದರೆ, ನಿಮಗೆ ಸಿಂಟ್ಯಾಕ್ಸ್ ತಕ್ಷಣವೇ ಅರ್ಥಗರ್ಭಿತವೆನಿಸುತ್ತದೆ:
type Result = SomeType extends OtherType ? TrueType : FalseType;
ಇಲ್ಲಿ, extends ಕೀವರ್ಡ್ ನಮ್ಮ ಕಂಡೀಷನ್ ಆಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಇದು SomeType ಅನ್ನು OtherType ಗೆ ನಿಯೋಜಿಸಬಹುದೇ ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ. ಒಂದು ಸರಳ ಉದಾಹರಣೆಯೊಂದಿಗೆ ಇದನ್ನು ವಿವರಿಸೋಣ.
ಮೂಲ ಉದಾಹರಣೆ: ಒಂದು ಟೈಪ್ ಅನ್ನು ಪರಿಶೀಲಿಸುವುದು
ಒಂದು ನಿರ್ದಿಷ್ಟ ಟೈಪ್ T ಸ್ಟ್ರಿಂಗ್ ಆಗಿದ್ದರೆ true ಎಂದು, ಇಲ್ಲದಿದ್ದರೆ false ಎಂದು ಪರಿಹರಿಸುವ ಟೈಪ್ ಅನ್ನು ನಾವು ರಚಿಸಲು ಬಯಸುತ್ತೇವೆ ಎಂದು ಭಾವಿಸೋಣ.
type IsString
ನಂತರ ನಾವು ಈ ಟೈಪ್ ಅನ್ನು ಈ ರೀತಿ ಬಳಸಬಹುದು:
type A = IsString<"hello">; // ಟೈಪ್ A ಎಂಬುದು true ಆಗಿದೆ
type B = IsString<123>; // ಟೈಪ್ B ಎಂಬುದು false ಆಗಿದೆ
ಇದು ಮೂಲಭೂತ ನಿರ್ಮಾಣದ ಭಾಗವಾಗಿದೆ. ಆದರೆ ಕಂಡೀಷನಲ್ ಟೈಪ್ಗಳ ನಿಜವಾದ ಶಕ್ತಿಯು infer ಕೀವರ್ಡ್ನೊಂದಿಗೆ ಸಂಯೋಜಿಸಿದಾಗ ಅನಾವರಣಗೊಳ್ಳುತ್ತದೆ.
infer ನ ಶಕ್ತಿ: ಒಳಗಿನಿಂದ ಟೈಪ್ಗಳನ್ನು ಹೊರತೆಗೆಯುವುದು
infer ಕೀವರ್ಡ್ ಒಂದು ಗೇಮ್-ಚೇಂಜರ್ ಆಗಿದೆ. ಇದು extends ಕ್ಲಾಸ್ನೊಳಗೆ ಹೊಸ ಜೆನೆರಿಕ್ ಟೈಪ್ ವೇರಿಯೇಬಲ್ ಅನ್ನು ಘೋಷಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ, ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನೀವು ಪರಿಶೀಲಿಸುತ್ತಿರುವ ಟೈಪ್ನ ಒಂದು ಭಾಗವನ್ನು ಸೆರೆಹಿಡಿಯುತ್ತದೆ. ಇದನ್ನು ಪ್ಯಾಟರ್ನ್ ಮ್ಯಾಚಿಂಗ್ನಿಂದ ತನ್ನ ಮೌಲ್ಯವನ್ನು ಪಡೆಯುವ ಟೈಪ್-ಲೆವೆಲ್ ವೇರಿಯೇಬಲ್ ಡಿಕ್ಲರೇಶನ್ ಎಂದು ಯೋಚಿಸಿ.
ಒಂದು ಕ್ಲಾಸಿಕ್ ಉದಾಹರಣೆಯೆಂದರೆ Promise ಒಳಗೆ ಇರುವ ಟೈಪ್ ಅನ್ನು ಅನ್ವ್ರ್ಯಾಪ್ ಮಾಡುವುದು.
type UnwrapPromise
ಇದನ್ನು ವಿಶ್ಲೇಷಿಸೋಣ:
T extends Promise: ಇದುTಒಂದುPromiseಹೌದೇ ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ. ಹೌದಾದರೆ, ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ ರಚನೆಯನ್ನು ಹೊಂದಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ.infer U: ಹೊಂದಾಣಿಕೆ ಯಶಸ್ವಿಯಾದರೆ, ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್Promiseಪರಿಹರಿಸುವ ಟೈಪ್ ಅನ್ನು ಸೆರೆಹಿಡಿದು ಅದನ್ನುUಹೆಸರಿನ ಹೊಸ ಟೈಪ್ ವೇರಿಯೇಬಲ್ನಲ್ಲಿ ಇರಿಸುತ್ತದೆ.? U : T: ಕಂಡೀಷನ್ ನಿಜವಾಗಿದ್ದರೆ (TಒಂದುPromiseಆಗಿದ್ದರೆ), ಫಲಿತಾಂಶದ ಟೈಪ್U(ಅನ್ವ್ರ್ಯಾಪ್ ಮಾಡಿದ ಟೈಪ್) ಆಗಿರುತ್ತದೆ. ಇಲ್ಲದಿದ್ದರೆ, ಫಲಿತಾಂಶದ ಟೈಪ್ ಮೂಲ ಟೈಪ್Tಆಗಿರುತ್ತದೆ.
ಬಳಕೆ:
type User = { id: number; name: string; };
type UserPromise = Promise
type UnwrappedUser = UnwrapPromise
type UnwrappedNumber = UnwrapPromise
ಈ ಮಾದರಿಯು ಎಷ್ಟು ಸಾಮಾನ್ಯವಾಗಿದೆ ಎಂದರೆ ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ ReturnType ನಂತಹ ಅಂತರ್ನಿರ್ಮಿತ ಯುಟಿಲಿಟಿ ಟೈಪ್ಗಳನ್ನು ಒಳಗೊಂಡಿದೆ, ಇದು ಒಂದು ಫಂಕ್ಷನ್ನ ರಿಟರ್ನ್ ಟೈಪ್ ಅನ್ನು ಹೊರತೆಗೆಯಲು ಇದೇ ತತ್ವವನ್ನು ಬಳಸಿ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗಿದೆ.
ಡಿಸ್ಟ್ರಿಬ್ಯೂಟಿವ್ ಕಂಡೀಷನಲ್ ಟೈಪ್ಸ್: ಯೂನಿಯನ್ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದು
ಕಂಡೀಷನಲ್ ಟೈಪ್ಗಳ ಒಂದು ಆಕರ್ಷಕ ಮತ್ತು ನಿರ್ಣಾಯಕ ನಡವಳಿಕೆಯೆಂದರೆ, ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿರುವ ಟೈಪ್ ಒಂದು "ನೇಕ್ಡ್" ಜೆನೆರಿಕ್ ಟೈಪ್ ಪ್ಯಾರಾಮೀಟರ್ ಆಗಿರುವಾಗ ಅವು ಡಿಸ್ಟ್ರಿಬ್ಯೂಟಿವ್ ಆಗುತ್ತವೆ. ಇದರರ್ಥ ನೀವು ಅದಕ್ಕೆ ಯೂನಿಯನ್ ಟೈಪ್ ಅನ್ನು ಪಾಸ್ ಮಾಡಿದರೆ, ಕಂಡೀಷನಲ್ ಯೂನಿಯನ್ನ ಪ್ರತಿಯೊಬ್ಬ ಸದಸ್ಯನಿಗೆ ಪ್ರತ್ಯೇಕವಾಗಿ ಅನ್ವಯಿಸಲ್ಪಡುತ್ತದೆ, ಮತ್ತು ಫಲಿತಾಂಶಗಳನ್ನು ಹೊಸ ಯೂನಿಯನ್ಗೆ ಹಿಂತಿರುಗಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ.
ಒಂದು ಟೈಪ್ ಅನ್ನು ಆ ಟೈಪ್ನ ಅರೇಗೆ ಪರಿವರ್ತಿಸುವ ಟೈಪ್ ಅನ್ನು ಪರಿಗಣಿಸಿ:
type ToArray
ನಾವು ToArray ಗೆ ಯೂನಿಯನ್ ಟೈಪ್ ಅನ್ನು ಪಾಸ್ ಮಾಡಿದರೆ:
type StrOrNumArray = ToArray
ಫಲಿತಾಂಶವು (string | number)[] ಅಲ್ಲ. ಏಕೆಂದರೆ T ಒಂದು ನೇಕ್ಡ್ ಟೈಪ್ ಪ್ಯಾರಾಮೀಟರ್ ಆಗಿದೆ, ಕಂಡೀಷನ್ ವಿತರಿಸಲ್ಪಡುತ್ತದೆ:
ToArrayಎಂಬುದುstring[]ಆಗುತ್ತದೆToArrayಎಂಬುದುnumber[]ಆಗುತ್ತದೆ
ಅಂತಿಮ ಫಲಿತಾಂಶವು ಈ ವೈಯಕ್ತಿಕ ಫಲಿತಾಂಶಗಳ ಯೂನಿಯನ್ ಆಗಿದೆ: string[] | number[].
ಈ ಡಿಸ್ಟ್ರಿಬ್ಯೂಟಿವ್ ಗುಣಲಕ್ಷಣವು ಯೂನಿಯನ್ಗಳನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಲು ಅತ್ಯಂತ ಉಪಯುಕ್ತವಾಗಿದೆ. ಉದಾಹರಣೆಗೆ, ಅಂತರ್ನಿರ್ಮಿತ Extract ಯುಟಿಲಿಟಿ ಟೈಪ್, ಯೂನಿಯನ್ T ನಿಂದ U ಗೆ ನಿಯೋಜಿಸಬಹುದಾದ ಸದಸ್ಯರನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಇದನ್ನು ಬಳಸುತ್ತದೆ.
ನೀವು ಈ ಡಿಸ್ಟ್ರಿಬ್ಯೂಟಿವ್ ನಡವಳಿಕೆಯನ್ನು ತಡೆಯಬೇಕಾದರೆ, ನೀವು extends ಕ್ಲಾಸ್ನ ಎರಡೂ ಬದಿಗಳಲ್ಲಿ ಟೈಪ್ ಪ್ಯಾರಾಮೀಟರ್ ಅನ್ನು ಟಪಲ್ನಲ್ಲಿ ಸುತ್ತುವರಿಯಬಹುದು:
type ToArrayNonDistributive
type StrOrNumArrayUnified = ToArrayNonDistributive
ಈ ದೃಢವಾದ ಅಡಿಪಾಯದೊಂದಿಗೆ, ನಾವು ಡೈನಾಮಿಕ್ ಸ್ಟ್ರಿಂಗ್ ಟೈಪ್ಗಳನ್ನು ಹೇಗೆ ನಿರ್ಮಿಸಬಹುದು ಎಂಬುದನ್ನು ಅನ್ವೇಷಿಸೋಣ.
ಟೈಪ್ ಲೆವೆಲ್ನಲ್ಲಿ ಡೈನಾಮಿಕ್ ಸ್ಟ್ರಿಂಗ್ಗಳನ್ನು ನಿರ್ಮಿಸುವುದು: ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ ಟೈಪ್ಸ್
ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ 4.1 ರಲ್ಲಿ ಪರಿಚಯಿಸಲಾದ ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ ಟೈಪ್ಸ್, ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನ ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ ಸ್ಟ್ರಿಂಗ್ಗಳಂತೆ ಆಕಾರವನ್ನು ಹೊಂದಿರುವ ಟೈಪ್ಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಸ್ಟ್ರಿಂಗ್ ಲಿಟರಲ್ ಟೈಪ್ಗಳಿಂದ ಹೊಸದನ್ನು ಜೋಡಿಸಲು, ಸಂಯೋಜಿಸಲು ಮತ್ತು ಉತ್ಪಾದಿಸಲು ಅವು ನಿಮಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತವೆ.
ಸಿಂಟ್ಯಾಕ್ಸ್ ನೀವು ನಿರೀಕ್ಷಿಸುವಂತೆಯೇ ಇರುತ್ತದೆ:
type World = "World";
type Greeting = `Hello, ${World}!`; // Greeting ಟೈಪ್ "Hello, World!" ಆಗಿದೆ
ಇದು ಸರಳವೆಂದು ತೋರಬಹುದು, ಆದರೆ ಅದರ ಶಕ್ತಿಯು ಯೂನಿಯನ್ಗಳು ಮತ್ತು ಜೆನೆರಿಕ್ಸ್ಗಳೊಂದಿಗೆ ಸಂಯೋಜಿಸುವುದರಲ್ಲಿದೆ.
ಯೂನಿಯನ್ಗಳು ಮತ್ತು ಪರ್ಮ್ಯುಟೇಶನ್ಗಳು
ಒಂದು ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ ಟೈಪ್ ಯೂನಿಯನ್ ಅನ್ನು ಒಳಗೊಂಡಾಗ, ಅದು ಸಾಧ್ಯವಿರುವ ಪ್ರತಿಯೊಂದು ಸ್ಟ್ರಿಂಗ್ ಪರ್ಮ್ಯುಟೇಶನ್ ಅನ್ನು ಒಳಗೊಂಡಿರುವ ಹೊಸ ಯೂನಿಯನ್ಗೆ ವಿಸ್ತರಿಸುತ್ತದೆ. ಇದು ಉತ್ತಮವಾಗಿ-ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಕಾನ್ಸ್ಟಂಟ್ಗಳ ಗುಂಪನ್ನು ಉತ್ಪಾದಿಸಲು ಒಂದು ಶಕ್ತಿಶಾಲಿ ಮಾರ್ಗವಾಗಿದೆ.
CSS ಮಾರ್ಜಿನ್ ಪ್ರಾಪರ್ಟಿಗಳ ಗುಂಪನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವುದನ್ನು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ:
type Side = "top" | "right" | "bottom" | "left";
type MarginProperty = `margin-${Side}`;
MarginProperty ಗಾಗಿ ಫಲಿತಾಂಶದ ಟೈಪ್:
"margin-top" | "margin-right" | "margin-bottom" | "margin-left"
ನಿರ್ದಿಷ್ಟ ಸ್ಟ್ರಿಂಗ್ ಫಾರ್ಮ್ಯಾಟ್ಗಳನ್ನು ಮಾತ್ರ ಅನುಮತಿಸುವ ಟೈಪ್-ಸುರಕ್ಷಿತ ಕಾಂಪೊನೆಂಟ್ ಪ್ರಾಪ್ಸ್ ಅಥವಾ ಫಂಕ್ಷನ್ ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳನ್ನು ರಚಿಸಲು ಇದು ಪರಿಪೂರ್ಣವಾಗಿದೆ.
ಜೆನೆರಿಕ್ಸ್ಗಳೊಂದಿಗೆ ಸಂಯೋಜನೆ
ಜೆನೆರಿಕ್ಸ್ಗಳೊಂದಿಗೆ ಬಳಸಿದಾಗ ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ಗಳು ನಿಜವಾಗಿಯೂ ಹೊಳೆಯುತ್ತವೆ. ನೀವು ಕೆಲವು ಇನ್ಪುಟ್ ಆಧರಿಸಿ ಹೊಸ ಸ್ಟ್ರಿಂಗ್ ಲಿಟರಲ್ ಟೈಪ್ಗಳನ್ನು ಉತ್ಪಾದಿಸುವ ಫ್ಯಾಕ್ಟರಿ ಟೈಪ್ಗಳನ್ನು ರಚಿಸಬಹುದು.
type MakeEventListener
type UserListener = MakeEventListener<"user">; // "onUserChange"
type ProductListener = MakeEventListener<"product">; // "onProductChange"
ಈ ಮಾದರಿಯು ಡೈನಾಮಿಕ್, ಟೈಪ್-ಸುರಕ್ಷಿತ API ಗಳನ್ನು ರಚಿಸುವ ಕೀಲಿಯಾಗಿದೆ. ಆದರೆ ನಾವು ಸ್ಟ್ರಿಂಗ್ನ ಕೇಸ್ ಅನ್ನು ಮಾರ್ಪಡಿಸಬೇಕಾದರೆ, ಉದಾಹರಣೆಗೆ "onUserChange" ಪಡೆಯಲು "user" ಅನ್ನು "User" ಗೆ ಬದಲಾಯಿಸುವುದು ಹೇಗೆ? ಅಲ್ಲಿಯೇ ಸ್ಟ್ರಿಂಗ್ ಮ್ಯಾನಿಪುಲೇಶನ್ ಟೈಪ್ಗಳು ಬರುತ್ತವೆ.
ಟೂಲ್ಕಿಟ್: ಆಂತರಿಕ ಸ್ಟ್ರಿಂಗ್ ಮ್ಯಾನಿಪುಲೇಶನ್ ಟೈಪ್ಸ್
ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ಗಳನ್ನು ಇನ್ನಷ್ಟು ಶಕ್ತಿಯುತವಾಗಿಸಲು, ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ ಸ್ಟ್ರಿಂಗ್ ಲಿಟರಲ್ಗಳನ್ನು ಮ್ಯಾನಿಪುಲೇಟ್ ಮಾಡಲು ಅಂತರ್ನಿರ್ಮಿತ ಟೈಪ್ಗಳ ಒಂದು ಸೆಟ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ. ಇವು ಯುಟಿಲಿಟಿ ಫಂಕ್ಷನ್ಗಳಂತಿವೆ ಆದರೆ ಟೈಪ್ ಸಿಸ್ಟಮ್ಗಾಗಿ.
ಕೇಸ್ ಮಾಡಿಫೈಯರ್ಗಳು: `Uppercase`, `Lowercase`, `Capitalize`, `Uncapitalize`
ಈ ನಾಲ್ಕು ಟೈಪ್ಗಳು ತಮ್ಮ ಹೆಸರುಗಳು ಸೂಚಿಸುವಂತೆಯೇ ಮಾಡುತ್ತವೆ:
Uppercase: ಸಂಪೂರ್ಣ ಸ್ಟ್ರಿಂಗ್ ಟೈಪ್ ಅನ್ನು ಅಪ್ಪರ್ಕೇಸ್ಗೆ ಪರಿವರ್ತಿಸುತ್ತದೆ.type LOUD = Uppercase<"hello">; // "HELLO"Lowercase: ಸಂಪೂರ್ಣ ಸ್ಟ್ರಿಂಗ್ ಟೈಪ್ ಅನ್ನು ಲೋವರ್ಕೇಸ್ಗೆ ಪರಿವರ್ತಿಸುತ್ತದೆ.type quiet = Lowercase<"WORLD">; // "world"Capitalize: ಸ್ಟ್ರಿಂಗ್ ಟೈಪ್ನ ಮೊದಲ ಅಕ್ಷರವನ್ನು ಅಪ್ಪರ್ಕೇಸ್ಗೆ ಪರಿವರ್ತಿಸುತ್ತದೆ.type Proper = Capitalize<"john">; // "John"Uncapitalize: ಸ್ಟ್ರಿಂಗ್ ಟೈಪ್ನ ಮೊದಲ ಅಕ್ಷರವನ್ನು ಲೋವರ್ಕೇಸ್ಗೆ ಪರಿವರ್ತಿಸುತ್ತದೆ.type variable = Uncapitalize<"PersonName">; // "personName"
ನಮ್ಮ ಹಿಂದಿನ ಉದಾಹರಣೆಯನ್ನು ಮತ್ತೆ ನೋಡೋಣ ಮತ್ತು ಸಾಂಪ್ರದಾಯಿಕ ಈವೆಂಟ್ ಹ್ಯಾಂಡ್ಲರ್ ಹೆಸರುಗಳನ್ನು ಉತ್ಪಾದಿಸಲು Capitalize ಬಳಸಿ ಅದನ್ನು ಸುಧಾರಿಸೋಣ:
type MakeEventListener
type UserListener = MakeEventListener<"user">; // "onUserChange"
type ProductListener = MakeEventListener<"product">; // "onProductChange"
ಈಗ ನಮ್ಮ ಬಳಿ ಎಲ್ಲಾ ತುಣುಕುಗಳಿವೆ. ಸಂಕೀರ್ಣ, ನೈಜ-ಪ್ರಪಂಚದ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಅವು ಹೇಗೆ ಸಂಯೋಜಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ನೋಡೋಣ.
ಸಂಶ್ಲೇಷಣೆ: ಸುಧಾರಿತ ಮಾದರಿಗಳಿಗಾಗಿ ಮೂರನ್ನೂ ಸಂಯೋಜಿಸುವುದು
ಇಲ್ಲಿ ಸಿದ್ಧಾಂತವು ಅಭ್ಯಾಸವನ್ನು ಸಂಧಿಸುತ್ತದೆ. ಕಂಡೀಷನಲ್ ಟೈಪ್ಸ್, ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ಸ್, ಮತ್ತು ಸ್ಟ್ರಿಂಗ್ ಮ್ಯಾನಿಪುಲೇಶನ್ ಅನ್ನು ಒಟ್ಟಿಗೆ ಹೆಣೆಯುವ ಮೂಲಕ, ನಾವು ಅತ್ಯಂತ ಅತ್ಯಾಧುನಿಕ ಮತ್ತು ಸುರಕ್ಷಿತ ಟೈಪ್ ವ್ಯಾಖ್ಯಾನಗಳನ್ನು ನಿರ್ಮಿಸಬಹುದು.
ಮಾದರಿ 1: ಸಂಪೂರ್ಣವಾಗಿ ಟೈಪ್-ಸುರಕ್ಷಿತ ಈವೆಂಟ್ ಎಮಿಟರ್
ಗುರಿ: on(), off(), ಮತ್ತು emit() ನಂತಹ ಸಂಪೂರ್ಣ ಟೈಪ್-ಸುರಕ್ಷಿತ ವಿಧಾನಗಳೊಂದಿಗೆ ಜೆನೆರಿಕ್ EventEmitter ಕ್ಲಾಸ್ ಅನ್ನು ರಚಿಸುವುದು. ಇದರರ್ಥ:
- ವಿಧಾನಗಳಿಗೆ ಪಾಸ್ ಮಾಡಿದ ಈವೆಂಟ್ ಹೆಸರು ಮಾನ್ಯವಾದ ಈವೆಂಟ್ ಆಗಿರಬೇಕು.
emit()ಗೆ ಪಾಸ್ ಮಾಡಿದ ಪೇಲೋಡ್ ಆ ಈವೆಂಟ್ಗಾಗಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಟೈಪ್ಗೆ ಹೊಂದಿಕೆಯಾಗಬೇಕು.on()ಗೆ ಪಾಸ್ ಮಾಡಿದ ಕಾಲ್ಬ್ಯಾಕ್ ಫಂಕ್ಷನ್ ಆ ಈವೆಂಟ್ಗಾಗಿ ಸರಿಯಾದ ಪೇಲೋಡ್ ಟೈಪ್ ಅನ್ನು ಸ್ವೀಕರಿಸಬೇಕು.
ಮೊದಲಿಗೆ, ನಾವು ಈವೆಂಟ್ ಹೆಸರುಗಳನ್ನು ಅವುಗಳ ಪೇಲೋಡ್ ಟೈಪ್ಗಳಿಗೆ ಮ್ಯಾಪ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತೇವೆ:
interface EventMap {
"user:created": { userId: number; name: string; };
"user:deleted": { userId: number; };
"product:added": { productId: string; price: number; };
}
ಈಗ, ನಾವು ಜೆನೆರಿಕ್ EventEmitter ಕ್ಲಾಸ್ ಅನ್ನು ನಿರ್ಮಿಸಬಹುದು. ನಾವು ನಮ್ಮ EventMap ರಚನೆಯನ್ನು ವಿಸ್ತರಿಸಬೇಕಾದ ಜೆನೆರಿಕ್ ಪ್ಯಾರಾಮೀಟರ್ Events ಅನ್ನು ಬಳಸುತ್ತೇವೆ.
class TypedEventEmitter
private listeners: { [K in keyof Events]?: ((payload: Events[K]) => void)[] } = {};
// `on` ವಿಧಾನವು ನಮ್ಮ Events ಮ್ಯಾಪ್ನ ಕೀ ಆಗಿರುವ ಜೆನೆರಿಕ್ `K` ಅನ್ನು ಬಳಸುತ್ತದೆ
on
if (!this.listeners[event]) {
this.listeners[event] = [];
}
this.listeners[event]?.push(callback);
}
// `emit` ವಿಧಾನವು ಪೇಲೋಡ್ ಈವೆಂಟ್ನ ಟೈಪ್ಗೆ ಹೊಂದಿಕೆಯಾಗುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ
emit
this.listeners[event]?.forEach(callback => callback(payload));
}
}
ಅದನ್ನು ಇನ್ಸ್ಟಾಂಷಿಯೇಟ್ ಮಾಡಿ ಬಳಸೋಣ:
const appEvents = new TypedEventEmitter
// ಇದು ಟೈಪ್-ಸುರಕ್ಷಿತವಾಗಿದೆ. ಪೇಲೋಡ್ ಅನ್ನು ಸರಿಯಾಗಿ { userId: number; name: string; } ಎಂದು ಇನ್ಫರ್ ಮಾಡಲಾಗಿದೆ
appEvents.on("user:created", (payload) => {
console.log(`User created: ${payload.name} (ID: ${payload.userId})`);
});
// ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ ಇಲ್ಲಿ ದೋಷವನ್ನು ನೀಡುತ್ತದೆ ಏಕೆಂದರೆ "user:updated" EventMap ನಲ್ಲಿ ಕೀ ಅಲ್ಲ
// appEvents.on("user:updated", () => {}); // ದೋಷ!
// ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ ಇಲ್ಲಿ ದೋಷವನ್ನು ನೀಡುತ್ತದೆ ಏಕೆಂದರೆ ಪೇಲೋಡ್ನಲ್ಲಿ 'name' ಪ್ರಾಪರ್ಟಿ ಕಾಣೆಯಾಗಿದೆ
// appEvents.emit("user:created", { userId: 123 }); // ದೋಷ!
ಈ ಮಾದರಿಯು ಅನೇಕ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಸಾಂಪ್ರದಾಯಿಕವಾಗಿ ಅತ್ಯಂತ ಡೈನಾಮಿಕ್ ಮತ್ತು ದೋಷ-ಪೀಡಿತ ಭಾಗಕ್ಕೆ ಕಂಪೈಲ್-ಟೈಮ್ ಸುರಕ್ಷತೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ.
ಮಾದರಿ 2: ನೆಸ್ಟೆಡ್ ಆಬ್ಜೆಕ್ಟ್ಗಳಿಗಾಗಿ ಟೈಪ್-ಸುರಕ್ಷಿತ ಪಾತ್ ಆಕ್ಸೆಸ್
ಗುರಿ: ಒಂದು ಯುಟಿಲಿಟಿ ಟೈಪ್, PathValue, ಅನ್ನು ರಚಿಸುವುದು. ಇದು ನೆಸ್ಟೆಡ್ ಆಬ್ಜೆಕ್ಟ್ T ನಲ್ಲಿನ ಮೌಲ್ಯದ ಟೈಪ್ ಅನ್ನು ಡಾಟ್-ನೋಟೇಶನ್ ಸ್ಟ್ರಿಂಗ್ ಪಾತ್ P ಬಳಸಿ (ಉದಾ., "user.address.city") ನಿರ್ಧರಿಸಬಲ್ಲದು.
ಇದು ರಿಕರ್ಸಿವ್ ಕಂಡೀಷನಲ್ ಟೈಪ್ಗಳನ್ನು ಪ್ರದರ್ಶಿಸುವ ಅತ್ಯಂತ ಸುಧಾರಿತ ಮಾದರಿಯಾಗಿದೆ.
ಇಲ್ಲಿ ಅನುಷ್ಠಾನವಿದೆ, ಅದನ್ನು ನಾವು ವಿಭಜಿಸುತ್ತೇವೆ:
type PathValue
? Key extends keyof T
? PathValue
: never
: P extends keyof T
? T[P]
: never;
ಒಂದು ಉದಾಹರಣೆಯೊಂದಿಗೆ ಅದರ ತರ್ಕವನ್ನು ಪತ್ತೆಹಚ್ಚೋಣ: PathValue
- ಆರಂಭಿಕ ಕರೆ:
Pಎಂಬುದು"a.b.c". ಇದು ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್`${infer Key}.${infer Rest}`ಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆ. Keyಅನ್ನು"a"ಎಂದು ಇನ್ಫರ್ ಮಾಡಲಾಗಿದೆ.Restಅನ್ನು"b.c"ಎಂದು ಇನ್ಫರ್ ಮಾಡಲಾಗಿದೆ.- ಮೊದಲ ರಿಕರ್ಷನ್: ಟೈಪ್
"a"ಎಂಬುದುMyObjectನ ಕೀ ಹೌದೇ ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ. ಹೌದಾದರೆ, ಅದು ರಿಕರ್ಸಿವ್ ಆಗಿPathValueಅನ್ನು ಕರೆಯುತ್ತದೆ. - ಎರಡನೇ ರಿಕರ್ಷನ್: ಈಗ,
Pಎಂಬುದು"b.c"ಆಗಿದೆ. ಇದು ಮತ್ತೆ ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆ. Keyಅನ್ನು"b"ಎಂದು ಇನ್ಫರ್ ಮಾಡಲಾಗಿದೆ.Restಅನ್ನು"c"ಎಂದು ಇನ್ಫರ್ ಮಾಡಲಾಗಿದೆ.- ಟೈಪ್
"b"ಎಂಬುದುMyObject["a"]ನ ಕೀ ಹೌದೇ ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ ಮತ್ತು ರಿಕರ್ಸಿವ್ ಆಗಿPathValueಅನ್ನು ಕರೆಯುತ್ತದೆ. - ಬೇಸ್ ಕೇಸ್: ಅಂತಿಮವಾಗಿ,
Pಎಂಬುದು"c"ಆಗಿದೆ. ಇದು`${infer Key}.${infer Rest}`ಗೆ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ. ಟೈಪ್ ತರ್ಕವು ಎರಡನೇ ಕಂಡೀಷನಲ್ಗೆ ಬೀಳುತ್ತದೆ:P extends keyof T ? T[P] : never. - ಟೈಪ್
"c"ಎಂಬುದುMyObject["a"]["b"]ನ ಕೀ ಹೌದೇ ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ. ಹೌದಾದರೆ, ಫಲಿತಾಂಶವುMyObject["a"]["b"]["c"]. ಇಲ್ಲದಿದ್ದರೆ, ಅದುnever.
ಒಂದು ಹೆಲ್ಪರ್ ಫಂಕ್ಷನ್ನೊಂದಿಗೆ ಬಳಕೆ:
declare function get
const myObject = {
user: {
name: "Alice",
address: {
city: "Wonderland",
zip: 12345
}
}
};
const city = get(myObject, "user.address.city"); // const city: string
const zip = get(myObject, "user.address.zip"); // const zip: number
const invalid = get(myObject, "user.email"); // const invalid: never
ಈ ಶಕ್ತಿಯುತ ಟೈಪ್ ಪಾತ್ಗಳಲ್ಲಿನ ಮುದ್ರಣದೋಷಗಳಿಂದಾಗುವ ರನ್ಟೈಮ್ ದೋಷಗಳನ್ನು ತಡೆಯುತ್ತದೆ ಮತ್ತು ಆಳವಾಗಿ ನೆಸ್ಟೆಡ್ ಆದ ಡೇಟಾ ರಚನೆಗಳಿಗೆ ಪರಿಪೂರ್ಣ ಟೈಪ್ ಇನ್ಫರೆನ್ಸ್ ಒದಗಿಸುತ್ತದೆ, ಇದು ಸಂಕೀರ್ಣ API ಪ್ರತಿಕ್ರಿಯೆಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವ ಜಾಗತಿಕ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ಸಾಮಾನ್ಯ ಸವಾಲಾಗಿದೆ.
ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯ ಪರಿಗಣನೆಗಳು
ಯಾವುದೇ ಶಕ್ತಿಯುತ ಸಾಧನದಂತೆ, ಈ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬುದ್ಧಿವಂತಿಕೆಯಿಂದ ಬಳಸುವುದು ಮುಖ್ಯ.
- ಓದುವಿಕೆಗೆ ಆದ್ಯತೆ ನೀಡಿ: ಸಂಕೀರ್ಣ ಟೈಪ್ಗಳು ಬೇಗನೆ ಓದಲಾಗದಂತಾಗಬಹುದು. ಅವುಗಳನ್ನು ಸಣ್ಣ, ಚೆನ್ನಾಗಿ ಹೆಸರಿಸಲಾದ ಹೆಲ್ಪರ್ ಟೈಪ್ಗಳಾಗಿ ವಿಭಜಿಸಿ. ನೀವು ಸಂಕೀರ್ಣ ರನ್ಟೈಮ್ ಕೋಡ್ನೊಂದಿಗೆ ಮಾಡುವಂತೆ, ತರ್ಕವನ್ನು ವಿವರಿಸಲು ಕಾಮೆಂಟ್ಗಳನ್ನು ಬಳಸಿ.
neverಟೈಪ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಿ: ದೋಷ ಸ್ಥಿತಿಗಳನ್ನು ನಿಭಾಯಿಸಲು ಮತ್ತು ಕಂಡೀಷನಲ್ ಟೈಪ್ಗಳಲ್ಲಿ ಯೂನಿಯನ್ಗಳನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಲುneverಟೈಪ್ ನಿಮ್ಮ ಪ್ರಾಥಮಿಕ ಸಾಧನವಾಗಿದೆ. ಇದು ಎಂದಿಗೂ ಸಂಭವಿಸಬಾರದ ಸ್ಥಿತಿಯನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ.- ರಿಕರ್ಷನ್ ಮಿತಿಗಳ ಬಗ್ಗೆ ಎಚ್ಚರವಿರಲಿ: ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ ಟೈಪ್ ಇನ್ಸ್ಟಾಂಟಿಯೇಶನ್ಗಾಗಿ ರಿಕರ್ಷನ್ ಆಳದ ಮಿತಿಯನ್ನು ಹೊಂದಿದೆ. ನಿಮ್ಮ ಟೈಪ್ಗಳು ತುಂಬಾ ಆಳವಾಗಿ ನೆಸ್ಟೆಡ್ ಆಗಿದ್ದರೆ ಅಥವಾ ಅನಂತವಾಗಿ ರಿಕರ್ಸಿವ್ ಆಗಿದ್ದರೆ, ಕಂಪೈಲರ್ ದೋಷವನ್ನು ನೀಡುತ್ತದೆ. ನಿಮ್ಮ ರಿಕರ್ಸಿವ್ ಟೈಪ್ಗಳಿಗೆ ಸ್ಪಷ್ಟವಾದ ಬೇಸ್ ಕೇಸ್ ಇದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
- IDE ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಿ: ಅತ್ಯಂತ ಸಂಕೀರ್ಣವಾದ ಟೈಪ್ಗಳು ಕೆಲವೊಮ್ಮೆ ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ ಲ್ಯಾಂಗ್ವೇಜ್ ಸರ್ವರ್ನ ಕಾರ್ಯಕ್ಷಮತೆಯ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರಬಹುದು, ಇದು ನಿಮ್ಮ ಎಡಿಟರ್ನಲ್ಲಿ ನಿಧಾನವಾದ ಆಟೋಕಂಪ್ಲೀಷನ್ ಮತ್ತು ಟೈಪ್ ಚೆಕಿಂಗ್ಗೆ ಕಾರಣವಾಗಬಹುದು. ನೀವು ನಿಧಾನಗತಿಯನ್ನು ಅನುಭವಿಸಿದರೆ, ಸಂಕೀರ್ಣ ಟೈಪ್ ಅನ್ನು ಸರಳಗೊಳಿಸಬಹುದೇ ಅಥವಾ ವಿಭಜಿಸಬಹುದೇ ಎಂದು ನೋಡಿ.
- ಯಾವಾಗ ನಿಲ್ಲಿಸಬೇಕೆಂದು ತಿಳಿಯಿರಿ: ಈ ವೈಶಿಷ್ಟ್ಯಗಳು ಟೈಪ್-ಸುರಕ್ಷತೆ ಮತ್ತು ಡೆವಲಪರ್ ಅನುಭವದ ಸಂಕೀರ್ಣ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸುವುದಕ್ಕಾಗಿವೆ. ಸರಳ ಟೈಪ್ಗಳನ್ನು ಅತಿಯಾಗಿ ಇಂಜಿನಿಯರಿಂಗ್ ಮಾಡಲು ಅವುಗಳನ್ನು ಬಳಸಬೇಡಿ. ಸ್ಪಷ್ಟತೆ ಮತ್ತು ಸುರಕ್ಷತೆಯನ್ನು ಹೆಚ್ಚಿಸುವುದು ಗುರಿಯಾಗಿದೆ, ಅನಗತ್ಯ ಸಂಕೀರ್ಣತೆಯನ್ನು ಸೇರಿಸುವುದಲ್ಲ.
ತೀರ್ಮಾನ
ಕಂಡೀಷನಲ್ ಟೈಪ್ಸ್, ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ಸ್, ಮತ್ತು ಸ್ಟ್ರಿಂಗ್ ಮ್ಯಾನಿಪುಲೇಶನ್ ಟೈಪ್ಗಳು ಕೇವಲ ಪ್ರತ್ಯೇಕ ವೈಶಿಷ್ಟ್ಯಗಳಲ್ಲ; ಅವು ಟೈಪ್ ಮಟ್ಟದಲ್ಲಿ ಅತ್ಯಾಧುನಿಕ ತರ್ಕವನ್ನು ನಿರ್ವಹಿಸಲು ಬಿಗಿಯಾಗಿ ಸಂಯೋಜಿತವಾದ ವ್ಯವಸ್ಥೆಯಾಗಿದೆ. ಅವು ಸರಳ ಟಿಪ್ಪಣಿಗಳನ್ನು ಮೀರಿ ಹೋಗಲು ಮತ್ತು ತಮ್ಮದೇ ಆದ ರಚನೆ ಮತ್ತು ನಿರ್ಬಂಧಗಳ ಬಗ್ಗೆ ಆಳವಾಗಿ ತಿಳಿದಿರುವ ವ್ಯವಸ್ಥೆಗಳನ್ನು ನಿರ್ಮಿಸಲು ನಮಗೆ ಅಧಿಕಾರ ನೀಡುತ್ತವೆ.
ಈ ಮೂರರ ಮೇಲೆ ಪಾಂಡಿತ್ಯ ಸಾಧಿಸುವ ಮೂಲಕ, ನೀವು ಹೀಗೆ ಮಾಡಬಹುದು:
- ಸ್ವಯಂ-ದಾಖಲೀಕರಣ API ಗಳನ್ನು ರಚಿಸಿ: ಟೈಪ್ಗಳೇ ದಸ್ತಾವೇಜಾಗುತ್ತವೆ, ಡೆವಲಪರ್ಗಳಿಗೆ ಅವುಗಳನ್ನು ಸರಿಯಾಗಿ ಬಳಸಲು ಮಾರ್ಗದರ್ಶನ ನೀಡುತ್ತವೆ.
- ದೋಷಗಳ ಸಂಪೂರ್ಣ ವರ್ಗಗಳನ್ನು ನಿವಾರಿಸಿ: ಟೈಪ್ ದೋಷಗಳು ಪ್ರೊಡಕ್ಷನ್ನಲ್ಲಿ ಬಳಕೆದಾರರಿಂದಲ್ಲ, ಕಂಪೈಲ್-ಟೈಮ್ನಲ್ಲಿ ಹಿಡಿಯಲ್ಪಡುತ್ತವೆ.
- ಡೆವಲಪರ್ ಅನುಭವವನ್ನು ಸುಧಾರಿಸಿ: ನಿಮ್ಮ ಕೋಡ್ಬೇಸ್ನ ಅತ್ಯಂತ ಡೈನಾಮಿಕ್ ಭಾಗಗಳಿಗೂ ಶ್ರೀಮಂತ ಆಟೋಕಂಪ್ಲೀಷನ್ ಮತ್ತು ಇನ್ಲೈನ್ ದೋಷ ಸಂದೇಶಗಳನ್ನು ಆನಂದಿಸಿ.
ಈ ಸುಧಾರಿತ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳುವುದು ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಸುರಕ್ಷತಾ ಜಾಲದಿಂದ ಅಭಿವೃದ್ಧಿಯಲ್ಲಿ ಪ್ರಬಲ ಪಾಲುದಾರನನ್ನಾಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ. ಇದು ಸಂಕೀರ್ಣ ವ್ಯಾಪಾರ ತರ್ಕ ಮತ್ತು ಇನ್ವೇರಿಯಂಟ್ಗಳನ್ನು ನೇರವಾಗಿ ಟೈಪ್ ಸಿಸ್ಟಮ್ಗೆ ಎನ್ಕೋಡ್ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ, ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಜಾಗತಿಕ ಪ್ರೇಕ್ಷಕರಿಗೆ ಹೆಚ್ಚು ದೃಢ, ನಿರ್ವಹಿಸಬಲ್ಲ ಮತ್ತು ಸ್ಕೇಲೆಬಲ್ ಆಗಿರುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.